package Datos;

import GUI.*;

public class Tablero {
	
	int id;
	int[][] fichas;
	int posX;
	int posY;
	int color;
		
	public Tablero() {

		super();
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public int[][] getFichas() {
		return fichas;
	}

	public void setFichas(int[][] fichas) {
		this.fichas = fichas;
	}

	public int getPosX() {
		return posX;
	}

	public void setPosX(int posX) {
		this.posX = posX;
	}

	public int getPosY() {
		return posY;
	}

	public void setPosY(int posY) {
		this.posY = posY;
	}

	public int getColor() {
		return color;
	}

	public void setColor(int color) {
		this.color = color;
	}

	public void jugar(int posX, int posY, VentanaPartida v1) {
		// 1 == negro, 0 == blanco
		//Siempre empieza el jugador de la izda y siempre juega con negras (1)
		//PENSAR COMO HACER QUE SALGAN LAS 4 INICIALES ANTES DEL CLICK
		//Jugara hasta que no pueda colocar mas fichas, entonces se pasara el turno a el otro jugador.
		
		//Inicializamos la matriz a 2 para evitar sobrepintado
				fichas = new int[10][10];
				for (int i = 0; i <= fichas.length - 1; i++) {
					for (int j = 0; j <= fichas[i].length - 1; j++) {
						 fichas[i][j]=2;
					}
				}
				//Pintamos las 4 fichas iniciales
				
				fichas [3][4]=1;fichas [4][5]=1;
				fichas [3][5]=0;fichas [4][4]=0;
				color = 1;
				dibujarFichas (fichas,v1);
		
		//Proceso de colocacion de fichas
		if (posicionValida(posX, posY, color)) {

			fichas[posX][posY] = color;
			comprobarComer(fichas, posX, posX, color);
			dibujarFichas(fichas, v1);
		}
	}

	public boolean posicionValida(int posX, int posY, int color) {

		// System.out.println("Posicion en arrayValida posX " + posX + " posY "+
		// posY);
		boolean valida = false;

		if (fichas[posX - 1][posY] != color) {
			valida = true;
		} else if (fichas[posX - 1][posY - 1] != color) {
			valida = true;
		} else if (fichas[posX][posY - 1] != color) {
			valida = true;
		} else if (fichas[posX + 1][posY] != color) {
			valida = true;
		} else if (fichas[posX + 1][posY + 1] != color) {
			valida = true;
		} else if (fichas[posX][posY + 1] != color) {
			valida = true;
		} else if (fichas[posX + 1][posY - 1] != color) {
			valida = true;
		} else if (fichas[posX - 1][posY + 1] != color) {
			valida = true;
		}
		return valida;
	}

	public void comprobarComer(int[][] fichas, int posX, int posY, int color) {
		int i = 1, j = 1;

		while ((fichas[posX - i][posY] != color) && (posX - i >= 1)
				&& (posY >= 1)) {

			if (fichas[posX - i][posY] == 1) {
				fichas[posX - i][posY] = 0;
			}
			if (fichas[posX - i][posY] == 1) {
				fichas[posX - i][posY] = 0;
			}
			i++;

		}
		i = 1;
		j = 1;
		while ((fichas[posX - i][posY - j] != color) && (posX - i >= 1)
				&& (posY - j >= 1)) {

			if (fichas[posX - i][posY - j] == 1) {
				fichas[posX - i][posY - j] = 0;
			}
			if (fichas[posX - i][posY - j] == 0) {
				fichas[posX - i][posY - j] = 1;
			}
			i++;
			j++;

		}
		i = 1;
		j = 1;
		while ((fichas[posX][posY - j] != color) && (posX >= 1)
				&& (posY - j >= 1)) {

			if (fichas[posX][posY - j] == 1) {
				fichas[posX][posY - j] = 0;
			}
			if (fichas[posX][posY - j] == 0) {
				fichas[posX][posY - j] = 1;
			}
			j++;

		}
		i = 1;
		j = 1;
		while ((fichas[posX + i][posY] != color) && (posX + i <= 8)
				&& (posY >= 1)) {
			// System.out.println("paso por bucle");
			// System.out.println("Posicion en BUCLE posX " + (posX + i) +
			// " posY " + posY);
			if (fichas[posX + i][posY] == 1) {
				fichas[posX + i][posY] = 0;
			}
			if (fichas[posX + i][posY] == 0) {
				fichas[posX + i][posY] = 1;
			}
			i++;

		}
		i = 1;
		j = 1;
		while ((fichas[posX][posY + j] != color) && (posX >= 1)
				&& (posY + j <= 8)) {

			if (fichas[posX][posY + j] == 1) {
				fichas[posX][posY + j] = 0;
			}
			if (fichas[posX][posY + j] == 0) {
				fichas[posX][posY + j] = 1;
			}
			j++;

		}
		i = 1;
		j = 1;
		while ((fichas[posX + i][posY + j] != color) && (posX + i <= 8)
				&& (posY + j >= 8)) {

			if (fichas[posX + i][posY + j] == 1) {
				fichas[posX + i][posY] = 0;
			}
			if (fichas[posX + i][posY + j] == 0) {
				fichas[posX + i][posY + j] = 1;
			}
			i++;
			j++;

		}
		i = 1;
		j = 1;
		while ((fichas[posX - i][posY + j] != color) && (posX - i >= 1)
				&& (posY + j <= 8)) {

			if (fichas[posX - i][posY + j] == 1) {
				fichas[posX - i][posY + j] = 0;
			}
			if (fichas[posX - i][posY + j] == 0) {
				fichas[posX - i][posY + j] = 1;
			}
			i++;
			j++;

		}
		i = 1;
		j = 1;
		while ((fichas[posX + i][posY - j] != color) && (posX + i <= 8)
				&& (posY - j >= 1)) {

			if (fichas[posX + i][posY - j] == 1) {
				fichas[posX + i][posY - j] = 0;
			}
			if (fichas[posX + i][posY - j] == 0) {
				fichas[posX + i][posY - j] = 1;
			}
			i++;
			j++;

		}
	}

	public void dibujarFichas(int[][] fichas, VentanaPartida v1) {

		for (int i = 0; i <= fichas.length - 1; i++) {
			for (int j = 0; j <= fichas[i].length - 1; j++) {
				int c = fichas[i][j];

				if (c == 1) {
					dibujarNegra(v1, i, j);
				}
				if (c == 0) {
					dibujarBlanca(v1, i, j);
				}
			}
		}
	}

	public void convertirYDibujarBlanca(int x, int y, VentanaPartida v1) {
		boolean convertidaX = false;
		boolean convertidaY = false;
		int x1 = 0;
		int x2 = 1;
		int xx = 0;
		int y1 = 0;
		int y2 = 1;
		int yy = 0;
		// System.out.println("Posicion que ENTRA posX"+x+"posY"+y);

		while (!convertidaX && (x2 < 8)) {

			if ((x >= x1) && (x <= x2)) {
				convertidaX = true;
			} else
				xx += 50;
			x2 += 1;
		}
		while (!convertidaY && convertidaX && (y2 < 8) && (yy <= 349)) {

			if ((y >= y1) && (y <= y2)) {
				convertidaY = true;
			} else
				yy += 50;
			y2 += 1;
		}
		// System.out.println("Posicion que SALE posX"+xx+"posY"+yy);
		v1.dibujarImagen("C:..\\Reversi\\images\\blanca.png", (xx), (yy - 50));
	}

	public void convertirYDibujarNegra(int x, int y, VentanaPartida v1) {
		boolean convertidaX = false;
		boolean convertidaY = false;
		int x1 = 0;
		int x2 = 1;
		int xx = 0;
		int y1 = 0;
		int y2 = 1;
		int yy = 0;
		// System.out.println("Posicion que ENTRA posX"+x+"posY"+y);

		while (!convertidaX && (x2 < 8)) {

			if ((x >= x1) && (x <= x2)) {
				convertidaX = true;
			} else
				xx += 50;
			x2 += 1;
		}
		while (!convertidaY && convertidaX && (y2 < 8) && (yy <= 349)) {

			if ((y >= y1) && (y <= y2)) {
				convertidaY = true;
			} else
				yy += 50;
			y2 += 1;
		}
		// System.out.println("Posicion que SALE posX"+xx+"posY"+yy);
		v1.dibujarImagen("C:..\\Reversi\\images\\negra.png", (xx), (yy - 50));
	}

	public void dibujarBlanca(VentanaPartida v1, int posiX, int posiY) {
		// System.out.println( "POS X "+ posiX + " POS Y: "+posiY);
		convertirYDibujarBlanca(posiX + 1, posiY, v1);
	}

	public void dibujarNegra(VentanaPartida v1, int posiX, int posiY) {
		convertirYDibujarNegra(posiX + 1, posiY, v1);
	}
}
